package com.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

import javax.swing.Box.Filler;
import javax.swing.JOptionPane;

public class FileUtil {
	private static String MESSAGE = "";

	/**
	 * 复制单个文件
	 * 
	 * @param srcFileName
	 *            待复制的文件名
	 * @param descFileName
	 *            目标文件名
	 * @param overlay
	 *            如果目标文件存在，是否覆盖
	 * @return 如果复制成功返回true，否则返回false
	 */
	public static boolean copyFile(String srcFileName, String destFileName,
			boolean overlay) {
		File srcFile = new File(srcFileName);

		// 判断源文件是否存在
		if (!srcFile.exists()) {
			MESSAGE = "源文件：" + srcFileName + "不存在！";
			JOptionPane.showMessageDialog(null, MESSAGE);
			return false;
		} else if (!srcFile.isFile()) {
			MESSAGE = "复制文件失败，源文件：" + srcFileName + "不是一个文件！";
			JOptionPane.showMessageDialog(null, MESSAGE);
			return false;
		}

		// 判断目标文件是否存在
		File destFile = new File(destFileName);
		if (destFile.exists()) {
			// 如果目标文件存在并允许覆盖
			if (overlay) {
				// 删除已经存在的目标文件，无论目标文件是目录还是单个文件
				new File(destFileName).delete();
			}
		} else {
			// 如果目标文件所在目录不存在，则创建目录
			if (!destFile.getParentFile().exists()) {
				// 目标文件所在目录不存在
				if (!destFile.getParentFile().mkdirs()) {
					// 复制文件失败：创建目标文件所在目录失败
					return false;
				}
			}
		}

		// 复制文件
		int byteread = 0; // 读取的字节数
		InputStream in = null;
		OutputStream out = null;

		try {
			in = new FileInputStream(srcFile);
			out = new FileOutputStream(destFile);
			byte[] buffer = new byte[1024];

			while ((byteread = in.read(buffer)) != -1) {
				out.write(buffer, 0, byteread);
			}
			return true;
		} catch (FileNotFoundException e) {
			return false;
		} catch (IOException e) {
			return false;
		} finally {
			try {
				if (out != null)
					out.close();
				if (in != null)
					in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 此方法只作为内容的写入，不做任务逻辑操作
	 * 
	 * @param filePath 写入的文本的路径
	 * @param contentSrc  需要写入的内容，格式已经在调用该方法前处理好，
	 * @return 成功 or 失败
	 */
	public static boolean writeFile(String filePath, String fileName, String content) {
		FileWriter fileWriter = null;
		try {
			if (!new File(filePath).exists()) {
				new File(filePath).mkdirs();
			}
			if (!new File(filePath + fileName).exists()) {
				new File(filePath + fileName).createNewFile();
			}
			fileWriter = new FileWriter(filePath + fileName, true);
			fileWriter.write(content);
		} catch (IOException e2) {
			if (fileWriter != null) {
				try {
					fileWriter.flush();
					fileWriter.close();
				} catch (IOException e1) {
					e1.printStackTrace();
				}
			}
			// System.out.println(e2.getMessage());
			return false;
		} finally {
			try {
				fileWriter.flush();
				fileWriter.close();
			} catch (Exception e) {
			}
		}

		return true;
	}

	/**
	 * 
	 * @param filePath
	 * @param fileName
	 * @param conent
	 */
	public static void writeFileToAdd(String filePath, String fileName, String conent) {
		BufferedWriter out = null;
		try {
			createFile(filePath, fileName) ;
			out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath + fileName, true)));
			out.write(conent);
		} catch (Exception e) {
			e.printStackTrace() ;
		} finally {
			try {
				out.close();
			} catch (IOException e) {
				
			}
		}
	}
	
	public static void createFolder(String filePath) {
		if(!new File(filePath).exists()) {
			new File(filePath).mkdirs() ;
		}
	}
	
	public static void createFile(String filePath, String fileName) throws Exception {
		createFolder(filePath) ;
		if(!new File(filePath + fileName).exists()) {
			new File(filePath + fileName).createNewFile() ;
		}
	}
	
	public static void createNewFile(String filePath, String fileName) throws Exception {
		createFolder(filePath) ;
		File file = new File(filePath + fileName) ;
		if(!file.exists()) {
			file.createNewFile() ;
		}else {
			file.delete() ;
			file.createNewFile() ;
		}
	}
}
